home *** CD-ROM | disk | FTP | other *** search
- /*
- ** CTCPDriver.h
- **
- ** TurboTCP support library
- ** TCP driver interface class
- **
- ** Copyright © 1993-94, FrostByte Design / Eric Scouten
- */
-
-
- #pragma once
-
- #include "TCL.h"
-
- #include <Types.h> // get <ConditionalMacros.h> if available
- #if (defined(GENERATINGPOWERPC) || defined(GENERATING68K))
- #include <MacTCP.h> // Universal Headers 2.0
- #else
- #include <MacTCPCommonTypes.h> // Univ Headers 1.0 or old headers
- #define GENERATINGCFM USESROUTINEDESCRIPTORS
- #endif
-
- #include <OSUtils.h>
-
- class CTCPAsyncCall;
- class CTCPDriver;
- class CTCPStream;
- class CTCPResolverCall;
-
- #ifndef TCL_NO_TEMPLATES
- class CTCPStreamList;
- class CTCPResolverCallList;
- #else
- class CPtrArray_CTCPStream;
- class CPtrArray_CTCPResolverCall;
- #define CTCPStreamList CPtrArray_CTCPStream
- #define CTCPResolverCallList CPtrArray_CTCPResolverCall
- #endif
-
-
- #define maxResolverCalls 8 // maximum DNR calls open simultaneously
-
-
- // asynchronous queue entries
-
- enum asyncQueueType {
- asyncCall = 1,
- resolverCall,
- notifyStream,
- disposeStream
- };
-
- #if defined(powerc) || defined (__powerc)
- #pragma options align=mac68k
- #endif
-
- struct TurboTCPQElem {
- struct QElem* qLink; // next item in queue
- short qType; // entry type — see asyncQueueType above
- void* qSelfLink; // link to whatever object we had
- TurboTCPQElem(void* itsSelfLink) : qSelfLink(itsSelfLink) {}
- // special constructor
- };
-
- #if defined(powerc) || defined(__powerc)
- #pragma options align=reset
- #endif
-
- typedef enum asyncQueueType asyncQueueType;
- typedef struct TurboTCPQElem TurboTCPQElem;
- typedef TurboTCPQElem* TurboTCPQElemPtr;
-
-
- /*______________________________________________________________________
- **
- ** CTCPDriver
- **
- ** This object performs all of the housekeeping associated with the MacTCP driver.
- ** It keeps track of all currently open streams and handles the delayed-processing of
- ** MacTCP completions and notifications. It is also responsible for seeing that MacTCP is
- ** in a stable state (i.e. no streams left open, DNR closed) before the application quits.
- **
- ** NOTE: This class is intended for the internal use of other TurboTCP classes only.
- ** Accordingly, all of its methods are declared private and friend class declarations are
- ** used to make its members available as appropriate. No user class should have a reason
- ** to use this object, nor should this object be subclassed.
- **
- ** In a future version of TurboTCP, this class will be made an abstract class to support
- ** MacTCP and Open Transport versions of the driver object.
- **
- */
-
-
- class CTCPDriver {
-
- private:
- friend class CTCPAsyncCall;
- friend class CTCPStream;
- friend class CTCPResolverCall;
- friend class UTurboTCP;
-
-
- // TCP driver availability information
-
- static CTCPDriver* gTCPDriver; // global reference to this object
- Boolean hasMacTCP; // is there a MacTCP driver available?
- Boolean hasResolver; // is the DNR code segment available?
- short myTCPRefNum; // MacTCP driver’s ioRefNum
- ip_addr myIPAddress; // our IP address
-
- // list of active streams/resolvers
-
- CTCPStreamList* activeStreamList; // list of active TCP streams
- CTCPResolverCallList* activeResolverList; // list of active DNR calls
-
- // interrupt-process queue
-
- QHdr asyncQueue; // interrupt-event queue
-
-
- // constructor/destructor
-
- CTCPDriver();
- virtual ~CTCPDriver() {} // don’t use this -- use Dispose() instead
- void Dispose();
-
-
- // event handling
-
- Boolean ProcessOneNetEvent();
-
-
- // TCP verification routines
-
- ip_addr GetIPAddr();
- Boolean CheckTCPDriver();
- Boolean CheckResolver();
- short GetTCPRefNum();
- void FetchIPAddr();
-
-
- // tracking active streams/resolvers
-
- void RegisterActiveStream(CTCPStream* theStream);
- void RegisterActiveResolver(CTCPResolverCall* theResolver);
- void RemoveActiveStream(CTCPStream* theStream);
- void RemoveActiveResolver(CTCPResolverCall* theResolver);
- Boolean CheckResolverLimit();
-
- };
-